/**
 * @(#) ConsumeCalc.java
 */

package it.unibo.iss.domotica.consumptionControlling;

import org.apache.log4j.Logger;

import it.unibo.iss.domotica.edDomain.Elettrodomestico;
import it.unibo.iss.domotica.edDomain.IElettrodomestico;
import it.unibo.iss.domotica.edDomain.IImpiantoElettrico;
import it.unibo.iss.domotica.edDomain.ImpiantoElettrico;
import it.unibo.iss.domotica.edDomain.StatoED;

public class ConsumptionCalc extends Thread
{
	private IImpiantoElettrico elettrodomestici;	
	private TotalConsumption consumption;
	private boolean stopThread;
	// Logger
	protected static final Logger logger = Logger.getLogger(ConsumptionCalc.class);
	
	public ConsumptionCalc(TotalConsumption cons) {
		consumption = cons;
		elettrodomestici = ImpiantoElettrico.getInstance();
		stopThread = false;
	}
	
	
	public void setStopThread(boolean stopThread) {
		this.stopThread = stopThread;
	}


	private double calc() {
		double consumoComplessivo = 0;

	    for(IElettrodomestico ed : elettrodomestici.getListEDValues()) {
	    	if(((Elettrodomestico)ed).getStato() != StatoED.OFF)
	    		consumoComplessivo += ed.getConsumption();
	    }
	    
	    return consumoComplessivo;
	}
	
	protected void calcConsumption() {
		double consumoComplessivo;
		
		consumoComplessivo = calc();
		
		consumption.setCurrentConsumption(consumoComplessivo, true);
		
		logger.debug("consumoComplessivo = " + consumoComplessivo);
	}
	
	public void forceCalc() {
		double consumoComplessivo;
		
		consumoComplessivo = calc();
		
		consumption.setCurrentConsumption(consumoComplessivo, false);
		
		logger.debug("consumoComplessivo = " + consumoComplessivo);
	}

	
	public double approximateConsumption(double val) {
		forceCalc();
		return consumption.getCurrentConsumption() + val;
	}
	
	@Override
	public void run() {
//		super.run();
		
		while(!stopThread) {
			calcConsumption();
			
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
